/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package GUI.Customer;

/**
 *
 * @author six
 */

import java.net.*;
import java.io.*;
import javax.swing.*;

public class Customer extends Thread implements Serializable{
    private static final int PUERTO = 8490;


    private Socket socketCliente;

    public Customer(String ip){
        arrancarCliente(ip);
        start();
    }
    public void run(){
        procesarMensajes();

    }

    private void arrancarCliente(String ip){

        try{
                socketCliente = new Socket(ip, PUERTO);
        }
        catch (java.lang.NumberFormatException e1){
            errorFatal(e1, "Numero de puerto inválido.");
        }
        catch( java.net.UnknownHostException e2){
            errorFatal(e2, "No se localiza el ordenador servidor con ese nombre.");
        }
        catch( java.lang.SecurityException e3){
            String mensaje = "Hay restricciones de seguridad en el servidor para conectarse por el "+
                                "puerto " + PUERTO;
            errorFatal(e3, mensaje);
        }
        catch(IOException e4){
            String mensaje = "No se puede conectar con el puerto " + PUERTO + "de la máquina "+
                                "servidora. Asegúrese de que el servidor está en marcha.";
            errorFatal(e4, mensaje);
        }
    }

    private void procesarMensajes(){
        ObjectInputStream entradaObjetos=null;
        ObjectOutputStream salidaObjetos=null;

        try{
            BufferedReader entradaConsola = new BufferedReader(new InputStreamReader(System.in));
        entradaObjetos = new ObjectInputStream (socketCliente.getInputStream());
        salidaObjetos = new ObjectOutputStream (socketCliente.getOutputStream());
        salidaObjetos.flush();

            new ThreadCostumer(entradaObjetos, salidaObjetos);
                ////////////////-------------checar
            while(true){
                salidaObjetos.writeObject(entradaConsola.readLine());
                salidaObjetos.flush();
                    }
        }catch (EOFException e){
            
        }catch (IOException e){
            e.printStackTrace();

            if( entradaObjetos != null){
                try{
                    entradaObjetos.close();
                }
                catch (Exception e1){
                    entradaObjetos = null;
                }
            }
            if (salidaObjetos != null){
                try{
                    salidaObjetos.close();
                }
                catch(Exception e1){
                    salidaObjetos=null;
                }
            }
            if( socketCliente != null){
                try{
                    socketCliente.close();
                }
                catch (Exception e1){
                    socketCliente = null;
                }
            }
            String mensaje = "Se ha perdido la comunicacion con el servidor. Seguramente se debe a "+
                            "que se ha cerrado el servidor o a errores de trtansmicion";
            errorFatal(e, mensaje);
        }

    }

    private static void errorFatal(Exception exception, String mensajeError){
        exception.printStackTrace();
        JOptionPane.showMessageDialog(null, "Error fatal." + System.getProperty("line.separator") +
                mensajeError, "Información para el usuario", JOptionPane.WARNING_MESSAGE);
        System.exit(-1);
    }

}
